[Mobile Hacking 6] 적절하지 못한 암호화 취약점

[Mobile Hacking 6] 적절하지 못한 암호화 취약점

Lecture
Security
태그
mobile hacking
security
public
완성
Y
생성일
Mar 18, 2024 05:34 AM
LectureName
Mobile Hacking (Android- checklist)

1. 로컬 암호화 이슈


개요
안드로이드 어플리케이션은 실행되는 도중에 특정 정보들을 저장해야 할 때가 있습니다. 개인 정보처럼 민감한 정보일 수도 있고, 민감한 정보가 아닐 수도 있습니다. 만약 중요한 정보를 저장해야 한다면 충분한 암호화 과정을 거쳐야 하고, 충분한 암호화 과정을 거치지 않는다면 중요 정보가 공격자한테 누출될 수 있습니다.
 
중요 정보
보통 어플리케이션에서 저장될 요소 중 중요 정보는 다음과 같을 수 있습니다.
  1. 사용자의 개인정보 (예: 이름, 이메일 주소, 전화번호 등)
  1. 사용자의 인증 정보 (예: 패스워드, 토큰 등)
  1. 민감한 데이터 (예: 금융 정보, 건강 정보, 사적인 메시지 등)
  1. 애플리케이션의 중요한 설정 값 (예: API 키, 서버 주소 등)
 
저장 위치
안드로이드에는 shared_prefs 라는 폴더가 존재합니다. 해당 폴더는 /data/data/<패키지>/ 경로에 존재하는데, SharedPreferences는 XML 파일 형식으로 데이터를 저장하며, 해당 데이터는 애플리케이션에 속한 여러 구성 요소에서 공유될 수 있습니다. 주로 애플리케이션의 설정 값, 사용자 프로필 정보, 애플리케이션 상태 등을 저장하는 데 사용됩니다.
 
🎯 해당 데이터를 호출하는 코드는 다음과 같습니다.
notion image
 
 
취약점
해당 정보들을 노출하거나, 암호화 하지 않아서 공격자가 권한을 탈취한 후 접근할 수 있다면 취약하다고 판단합니다.
 
 
 

2. 실습


2.1 인시큐어 뱅크 앱 실습

개요
인시큐어 뱅크 앱의 첫 로그인 화면에서 “Autofill Credentials” 라는 버튼을 볼 수 있습니다. 이 버튼을 사용하면 마지막으로 로그인했던 아이디와 패스워드를 자동으로 불러와 로그인 할 수 있습니다.
 
취약점 분석
➡️ 데이터 저장 위치 분석
notion image
한번 로그인에 성공하면, 추 후에 DoLogin 앱에 접근 시, getDefaultSharedPreferences 에서 데이터를 가져오게 됩니다. 앞서 해당 메서드를 사용할 경우 데이터가 어디에 저장되는지 설명하였으니, 바로 확인해 보겠습니다.
 
 
➡️ 저장된 데이터 확인
notion image
코드를 보면 유저의 아이디인 usernamebase64 encode 로 저장하고, 비밀번호인 rememberme_password 는 CryptoClass로 암호화를 적용한 뒤 SharedPreferences에 값을 수정합니다. 따라서 인시큐어뱅크 패키지의 ~/shared_prefs 폴더를 확인해 보겠습니다.
 
notion image
해당 파일 중, mySharedPreferences.xml 파일을 확인하면, 저장된 아이디와 비밀번호가 확인 가능합니다.
 
➡️ 암호화 방식 확인
  1. ID 부분 (base64)
  1. password 부분(AES)
notion image
이제 여기서 문제는 AES 부분입니다. 하지만 암호화에 사용된 클래스인 CryptoClass 를 분석해 보면, AES256을 쓰는것을 알 수 있습니다. 여기서 사용된 key는 변수로 선언되어 있기 때문에 key를 어디서 가져오는지 확인하면 복호화가 가능합니다.
 
notion image
놀랍게도 키가 클래스 선언부에 하드코딩 되어 있습니다.
 
 
➡️ 복호화
  1. ID
notion image
 
  1. password
notion image
 
이렇게 유저 정보를 손쉽게 탈취할 수 있었습니다.
 

2.2 대응방안

  • 키를 관리하는 서버를 별도로 두고, 키는 주기적으로 변경합니다.
  • 키를 암호화하여 파일 시스템에서 관리합니다.